package com.online.controller;

import com.faneui.common.bean.BaseResp;
import com.faneui.common.exception.BusinessException;
import com.faneui.common.utils.ListUtils;
import com.online.dal.dao.UserDAO;
import com.online.dal.model.Product;
import com.online.dal.model.User;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import java.util.List;


@RestController
@RequestMapping("register")//RequestMapping是用来处理请求地址映射的注解，可用于类或方法上
public class RegisterController {

    @Autowired//注解，它对类成员变量 方法及构造函数进行标注，完成自动装配的工作，通过使用来消除 set ，get方法
    private UserDAO userDAO;

    @RequestMapping(value = "", method = RequestMethod.GET)
    public ModelAndView indexOfAll() throws Exception {
        //使用ModelAndView类用来存储处理完后的结果数据，以及显示该数据的视图
        ModelAndView mv = new ModelAndView("register");
        return mv;
    }

    @RequestMapping(value = "/doregister", method = RequestMethod.POST)
    @ResponseBody//与RequestMapping合用，将RequestMapping返回的路径，直接返回成json数据（接收前端传过来的json字符串中数据）
    //@RequestBody User user将前台传入的json数据包装到user对象中
    public BaseResp doRegister(@RequestBody User user) throws BusinessException {
        BaseResp resp = new BaseResp();//BaseResp类用于代码执行是否成功后，传出对应参数
        try {
            // 校验 user 参数是否为空
            if (StringUtils.isBlank(user.getUserName())) {
                throw new BusinessException("用户名为空");
            }
            if (StringUtils.isBlank(user.getPassword())) {
                throw new BusinessException("密码是空");
            }
            // 先检查下 username 是否存在
            User param = new User();
            param.setUserName(user.getUserName());
            List<User> users = userDAO.queryByModel(param);//通过UserDAO接口的queryByModel()方法查询表中是否有相同数据
            if (ListUtils.isNotEmpty(users)) {
                throw new BusinessException("用户名已存在");
            }
            userDAO.insert(user);//通过UserDAO接口insert()方法将前台传入数据，包装好的user对象数据插入user表中
        } catch (Exception ex) {
            resp.setSuccess(false);
            resp.setMsg(ex.getMessage());
        }
        return resp;
    }


}
